
"""
作用 ： 主要用于所有接口的公共功能，定义成一个父类 。B(A) : 代表B继承了A类

功能1 ： 处理url ,确保url是一个完整的
功能2 ： 重新封装requests中的get()和post() . 主要是为了简化后面的调用
功能3 ： 处理请求头信息
功能4 ： 登录
"""

from setting import BASE_URL,LOGIN_INFO
import requests
from loguru import logger
from utils.object_utils import cache
from utils.basic_utils import get_pro_path
import os

class Base():

    def __init__(self):
        pass



    # 实现url的拼接
    def get_url(self,path,params=None):
        """
        返回的是一个完整的url
        :param path : 接口路径 ，/admin/admin/update
        :param params : 查询参数 ：page=1&limit=20&sort=add_time&order=desc
        :return:
        """
        if params:
            full_url = BASE_URL + path + '?' + params
            return full_url
        # logger.debug("url值:{}".format(BASE_URL+path))
        return BASE_URL + path


    # 重新实现get和post方法
    def get(self,url):
        """
        返回的是json格式 ，要进行错误处理
        :return:
        """
        result = None
        response = requests.get(url,headers=self.__get_headers())
        try:
            result = response.json()
            logger.success("请求url:{},返回结果:{}".format(url,result))
            return result
        except Exception as e:
            logger.error("请求get方法异常，返回数据为:{},返回异常:{}".format(result,e))

    def post(self,url,data):
        result = None
        response = requests.post(url,json=data,headers=self.__get_headers())
        try:
            result = response.json()
            logger.success("请求url:{},请求体数据:{},返回结果:{}".format(url,data, result))
            return result
        except Exception as e:
            logger.error("请求post方法异常，返回数据为:{},返回异常:{}".format(result,e))
    # 实现所有请求头信息
    def __get_headers(self):

        headers = {"Content-Type":"application/json"}        # 定义初始值
        token = cache.get('token')      # 从缓存中获取token的值
        if token:
            headers.update({"X-Litemall-Admin-Token":token})
            return headers
        return headers


    # 实现登录
    def login(self):
        login_path = '/admin/auth/login'
        login_url = self.get_url(login_path)
        result = self.post(login_url,LOGIN_INFO)
        try:
            if 0 == result.get('errno'):
                logger.success("请求登录接口成功")
                token = result.get('data').get('token')
                # 需要对token进行保存，使用到的技术是cacheout ,它可以进行缓存 。
                cache.set('token',token)
            else:
                logger.error("登录失败:{}".format(result))
            return result
        except Exception as e:
            logger.error("请求登录接口返回异常,报错信息:{}".format(e))



if __name__ == '__main__':

    base = Base()
    print(base.get_url('/admin/admin/create'))
    print(base.login())